package org.epanetgrid.otimizacao.util;

import java.util.Collection;

/**
 * Classe auxiliar para tratamento de exce��es.
 * 
 * @author C�cero Alan Leite Cruz, alanlcruz@gmail.com, 09/01/2008
 *
 */
public class ExceptionUtils {

	/**
	 * Checa se o elemento � nulo.
	 * 
	 * @param object O objecto a ser checado.
	 * @param errorMsg A mensagem de erro que deve ser criado a exce��o.
	 */
	public static void checkNull(Object object, String errorMsg) {
		if (null == object) {
			throw new NullPointerException(errorMsg);
		}
	}

	/**
	 * Checa se a <code>String</code> � vazia. A <code>String</code> n�o deve ser nula para esse m�todo ser chamado pois isso n�o � verificado.
	 * 
	 * @param object O objecto a ser checado.
	 * @param errorMsg A mensagem de erro que deve ser criado a exce��o.
	 */
	public static void checkEmpty(String object, String errorMsg) {
		if (object.trim().equals("")) {
			throw new IllegalArgumentException(errorMsg);
		}
	}

	/**
	 * Checa se o array � nulo ou possiu elementos nulos.
	 * 
	 * @param object O objecto a ser checado.
	 * @param errorMsg A mensagem de erro que deve ser criado a exce��o.
	 */
	public static void checkArrayNull(Object[] object, String errorMsg) {
		checkNull(object, errorMsg);
		for (int i = 0; i < object.length; i++) {
			if (null == object[i]) {
				throw new NullPointerException(errorMsg);
			}
		}

	}

	/**
	 * Checa se o array � nulo ou possiu elementos nulos.
	 * 
	 * @param object O objecto a ser checado.
	 * @param errorMsg A mensagem de erro que deve ser criado a exce��o.
	 */
	public static void checkColNull(Collection object, String errorMsg) {
		checkNull(object, errorMsg);
		if (object.contains( null )) {
			throw new NullPointerException(errorMsg);
		}
	}

	/**
	 * Checa se o array possui elementos. O array n�o deve ser nulo para esse m�todo ser chamado pois isso n�o � verificado.
	 * 
	 * @param object O objecto a ser checado.
	 * @param errorMsg A mensagem de erro que deve ser criado a exce��o.
	 */
	public static void checkHasElements(Object[] object, String errorMsg) {
		if (object.length == 0) {
			throw new IllegalArgumentException(errorMsg);
		}
	}

	/**
	 * Checa se a cole��o possui elementos. A cole��o n�o deve ser nulo para esse m�todo ser chamado pois isso n�o � verificado.
	 * 
	 * @param object O objecto a ser checado.
	 * @param errorMsg A mensagem de erro que deve ser criado a exce��o.
	 */
	public static <E> void checkHasElements(Collection<E> object, String errorMsg) {
		if (object.size() == 0) {
			throw new IllegalArgumentException(errorMsg);
		}
	}

	/**
	 * Lan�a exce��o de argumento ilegal.
	 *
	 * @param error A mensagem de erro da exce��o.
	 */
	public static void illegal(String error) {
		throw new IllegalArgumentException(error);
	}

}
